<?php

class PresupuestoController extends Zend_Controller_Action
{

    public function init()
    {
        $this->em = Zend_Registry::getInstance()->entitymanager;
    }

    public function indexAction()
    {
        // action body
    }

    public function crearAction()
    {
        // action body
    }

    public function listarAction()
    {
       try{

            $presupuestos=$this->em->createQueryBuilder()
                               ->select      ('p.codigoPresupuesto')
                               ->addselect   ('p.periodo')
                               ->addselect   ('p.montoInicialIngreso')
                               ->addselect   ('p.montoInicialEgreso')
                               ->from        ('Default_Model_Presupuesto','p')
                               ->orderBy     ('p.codigoPresupuesto', 'asc')
                               ->setFirstResult (0)
                               ->setMaxResults  (20)
                               ->getQuery       ()
                               ->execute        ();

            $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(p.codigoPresupuesto)')
                    ->from     ('Default_Model_Presupuesto', 'p')
                    ->getQuery ()
                    ->getSingleScalarResult();

            // convertir a json
            $this->view->jsondata = Zend_Json::encode(Array(
                "success" => true,
                "total"   => $cantidad,
                "rows"    => $presupuestos
            ));

       }
       catch(Exception $e){
         $this->view->error = 'Error al cargar los presupuestos.';

       }

    }

    public function editarAction()
    {
       try{
        $id = $this->_request->getQuery('id');
        // obtener los datos
        $this->view->presupuesto = $this->em->find('Default_Model_Presupuesto', $id);

        }catch(Exception $e){
            $this->view->error = 'Error al cargar datos.';

        }
    }

    public function ajaxCrearAction()
    {
        try{

            $periodo = $this->_request->getPost('Periodo');


	   $presupuesto = $this->em->createQueryBuilder()
                    ->select   ('p.periodo')
                    ->from     ('Default_Model_Presupuesto', 'p')
                    ->where    ("p.periodo = $periodo")
                    ->getQuery ()
					->execute();


            if ($presupuesto){
                X\Msg::Failure('El presupuesto ya existe.');
                return;
            }

            $Presupuesto =new Default_Model_Presupuesto();
            $Presupuesto->setPeriodo($periodo);
            $Presupuesto->setMontoInicialIngreso(0);
            $Presupuesto->setMontoInicialEgreso(0);
             // guardar
            $this->em->persist($Presupuesto);
            $this->em->flush();

            X\Msg::Success('El presupuesto ha sido creada con éxito.');
        }
        catch(Exception $e){
            X\Msg::Failure('Error al crear El presupuesto.'.$e->getMessage());

        }


    }

    public function ajaxListarAction()
    {
        try{

            // obtener los parametros
            $start = $this->_request->getPost("start");
            $limit = $this->_request->getPost("limit");
            $sort  = $this->_request->getPost("sort");
            $dir   = $this->_request->getPost("dir");

            // parametros por defecto
            $sort = isset($sort)? $sort : 'periodo';
            $dir  = isset($dir)?  $dir  : 'asc';

            // prefijo para el sort


       $presupuestos=$this->em->createQueryBuilder()
                               ->select      ('p.codigoPresupuesto')
                               ->addselect   ('p.periodo')
                               ->addselect   ('p.montoInicialIngreso')
                               ->addselect   ('p.montoInicialEgreso')
                               ->from        ('Default_Model_Presupuesto','p')
                               ->orderBy     ('p.codigoPresupuesto', 'asc')
                               ->setFirstResult ($start)
                               ->setMaxResults  ($limit)
                               ->getQuery       ()
                               ->execute        ();

        $cont=count($presupuestos);

        $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(p.codigoPresupuesto)')
                    ->from     ('Default_Model_Presupuesto', 'p')
                    ->getQuery ()
                    ->getSingleScalarResult();


            // convertir a json
            echo Zend_Json::encode(Array(
                "success" => true,
                "total"   => $cantidad,
                "rows"    => $presupuestos
            ));

        }
        catch(Exception $e){
            $this->view->error = 'Error al cargar los presupuestos.';

        }
    }

    public function ajaxEliminarAction()
    {
        try{
            // obtener los parametros
            $id = $this->_request->getPost('id');

            $cuentas=$this->em->createQueryBuilder()
                    ->select    ('c.codigoCuenta')
                    ->addselect ('p.codigoPresupuesto')
                    ->from      ('Default_Model_Cuenta','c')
                    ->join      ('c.presupuesto',   'p')
                    ->where     ("p.codigoPresupuesto=$id")
                    ->getQuery       ()
                    ->execute        ();
            // obtener el objeto

            if(count($cuentas)){
               X\Msg::Failure('No se puede eliminar Presupuesto Existen Cuentas dependientes de este presupuesto');
               return;
            };

            $presupuestos = $this->em->find('Default_Model_Presupuesto', $id);

            // guardar el objeto
            $this->em->remove($presupuestos);
            $this->em->flush();

            X\Msg::Success('El presupuesto se ha eliminado con éxito.');
        }
        catch(Exception $e){
            X\Msg::Failure('Error al eliminar el presupuesto.'.$e->getMessage());

        }

    }

    public function ajaxEditarAction()
    {
       try{
            $cod= $this->_request->getPost('codigoPresupuesto');
			$periodo = $this->_request->getPost('Periodo');

			$presupuesto = $this->em->createQueryBuilder()
                    ->select   ('p.periodo')
                    ->from     ('Default_Model_Presupuesto', 'p')
                    ->where    ("p.codigoPresupuesto <> $cod")
					->andWhere ("p.periodo = $periodo")
                    ->getQuery ()
					->execute();


            if ($presupuesto){
                X\Msg::Failure('El presupuesto ya existe.');
                return;
            }



            $Presupuesto =$this->em->find('Default_Model_Presupuesto',$cod);

            $Presupuesto->setPeriodo($periodo);

             // guardar
            $this->em->persist($Presupuesto);
            $this->em->flush();

            X\Msg::Success('El presupuesto ha sido actualizado con éxito.');
        }
        catch(Exception $e){
            X\Msg::Failure('Error al editar El presupuesto.'.$e->getMessage());

            }

    }

    public function importarAction()
    {
        try{
             $cod= $this->_request->getQuery('id');
             $this->view->presupuesto = $this->em->find('Default_Model_Presupuesto', $cod);

             $cuentas = $this->em->createQueryBuilder()
                    ->select         ('c.codigoCuenta')
                    ->addselect      ('c.montoInicial')
                    ->addselect      ('c.montoActual')
                    ->addselect      ('c.montoEjecutado')
                    ->addselect      ('p.periodo')
                    ->addselect      ('d.nombreDepartamento')
                    ->addselect      ('d.codigoDepartamento')
                    ->addselect      ('cc.codigoDepartamento as codigoCentroCostos')
                    ->addselect      ('r.nombreRubro')
                    ->addselect      ('r.codigoRubro')
                    ->from           ('Default_Model_Cuenta', 'c')
                    ->join           ('c.presupuesto',   'p')
                    ->join           ('c.departamento',  'd')
                    ->join           ('c.centroCostos',  'cc')
                    ->join           ('c.rubro',         'r')
                    -> where         ("p.codigoPresupuesto=$cod")
                    ->orderBy        ('c.codigoCuenta', 'asc')
                    ->setFirstResult (0)
                    ->getQuery       ()
                    ->execute        ();
             
            $cont=count($cuentas);

            $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(u.codigoCuenta)')
                    ->from     ('Default_Model_Cuenta', 'u')
                    ->getQuery ()
                    ->getSingleScalarResult();

            // convertir a json
            $this->view->jsondata = Zend_Json::encode(Array(
                "success" => true,
                "total"   => $cantidad,
                "rows"    => $cuentas
            ));
            //echo $this->view->error = 'Error '.$cantidad; return;
          //   echo $this->view->error = 'Error'.$this->view->jsondata; return;
        }
        catch(Exception $e){
            $this->view->error = 'Error';

    }}
    

    public function ajaxImportarAction()
    {
        try{

            $periodo = $this->_request->getPost('periodopresupuesto');
            $elegidos = $this->_request->getPost('CuentasRows');

            $Presupuesto = new Default_Model_Presupuesto();
            $Presupuesto->setPeriodo($periodo);
            $Presupuesto->setMontoInicialIngreso(0);
            $Presupuesto->setMontoInicialEgreso(0);
             // guardar
            $this->em->persist($Presupuesto);
            $this->em->flush();

            $presupuestos = $this->em->createQueryBuilder()
                    ->select   ('p.codigoPresupuesto')
                    ->addselect('p.periodo')
                    ->from     ('Default_Model_Presupuesto', 'p')
                    ->where    ("p.periodo = $periodo")
                    ->getQuery ()
                    ->execute();

             $m=$presupuestos[0]['codigoPresupuesto'];

             $nuevopto=$this->em->find('Default_Model_Presupuesto',$m);


             $cuentas=Zend_Json::decode($elegidos);


             for($i=0;$i<count($cuentas);$i++){

                    $r=$this->em->find('Default_Model_Rubro', $cuentas[$i]['codigoRubro']);
                    $d=$this->em->find('Default_Model_Departamento', $cuentas[$i]['codigoDepartamento']);
                    $cc=$this->em->find('Default_Model_Departamento', $cuentas[$i]['codigoCentroCostos']);

                    $Cuenta = new Default_Model_Cuenta;
                    $Cuenta->setMontoInicial($cuentas[$i]['montoInicial']);
                  //  $montoInicial= $Cuenta->getMontoInicial();
                    $montoInicial=$cuentas[$i]['montoInicial'];

                    if($r->getEgreso()){
                          $Cuenta->setMontoActual($montoInicial-0);
                          $nuevopto->setMontoInicialEgreso($nuevopto->getMontoInicialEgreso() + $montoInicial);

                    }
                    else{
                          $Cuenta->setMontoActual(0-$montoInicial);
                          $nuevopto->setMontoInicialIngreso($nuevopto->getMontoInicialIngreso() + $montoInicial);
                    }

                    $Cuenta->setMontoEjecutado(0);
                    $Cuenta->setDepartamento($d);
                    $Cuenta->setCentroCostos($cc);
                    $Cuenta->setRubro($r);
                    $Cuenta->setPresupuesto($nuevopto);


                    $this->em->persist($Cuenta);
             }

           $this->em->flush();
           X\Msg::Success('El presupuesto ha sido importado correctamente');
           return;
        }
        catch(Exeption $e){
              X\Msg::Failure('Error al cargar datos.');
        }


    }

    public function ajaxPeriodosAction()
    {
    	try{
    
    		$presupuestos = $this->em->createQueryBuilder()
    		->select   ('p.periodo')
    		->from     ('Default_Model_Presupuesto', 'p')
    		->getQuery ()
    		->execute();
    
    		 $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(p.periodo)')
                    ->from     ('Default_Model_Presupuesto', 'p')
                    ->getQuery ()
                    ->getSingleScalarResult();
			
    		 echo Zend_Json::encode(Array(
    		 		"success" => true,
    		 		"total"   => $cantidad,
    		 		"rows"    => $presupuestos
    		 ));
    	}
    	catch(Exeption $e){
    		X\Msg::Failure('Error al cargar datos.');
    	}
    
    }

    public function ajaxCuentaAction()
    {
       try{
            $cod   = $this->_request->getPost('idp');
            $start = $this->_request->getPost("start");
            $limit = $this->_request->getPost("limit");
            $sort  = $this->_request->getPost("sort");
            $dir   = $this->_request->getPost("dir");

            $sort = isset($sort)? $sort : 'codigoCuenta';
            $dir  = isset($dir)?  $dir  : 'asc';

            $prefijo = ($sort == 'nombreRubro'?        'r.' :
                       ($sort == 'nombreDepartamento'? 'd.' :
	               ($sort == 'periodo'?			   'p.' :
		       ($sort == 'codigoRubro'?'r.':'c.') )));

            // X\Msg::Failure('Error '.$prefijo.$sort.$dir.' a '.$cod);return;
             $cuentas = $this->em->createQueryBuilder()
                    ->select         ('c.codigoCuenta')
                    ->addselect      ('c.montoInicial')
                    ->addselect      ('c.montoActual')
                    ->addselect      ('c.montoEjecutado')
                    ->addselect      ('p.periodo')
                    ->addselect      ('d.nombreDepartamento')
                    ->addselect      ('d.codigoDepartamento')
                    ->addselect      ('cc.codigoDepartamento as codigoCentroCostos')
                    ->addselect      ('r.nombreRubro')
                    ->addselect      ('r.codigoRubro')
                    ->from           ('Default_Model_Cuenta', 'c')
                    ->join           ('c.presupuesto',   'p')
                    ->join           ('c.departamento',  'd')
                    ->join           ('c.centroCostos',  'cc')
                    ->join           ('c.rubro',        'r')
                    ->where          ("p.codigoPresupuesto=$cod")
                    ->orderBy        ($prefijo.$sort, $dir)
                    ->setFirstResult ($start)
                    ->setMaxResults  ($limit)
                    ->getQuery       ()
                    ->execute        ();



                $cantidad = $this->em->createQueryBuilder()
                    ->select   ('count(u.codigoCuenta)')
                    ->from     ('Default_Model_Cuenta', 'u')
                    ->getQuery ()
                    ->getSingleScalarResult();

            // convertir a json
            echo Zend_Json::encode(Array(
                "success" => true,
                "total"   => $cantidad,
                "rows"    => $cuentas
            ));
       }
       catch (Exeption $e){
           $this->view->error ='Error al cargar las cuentas del presupuesto';
       }
    }


}























